/*
 * FreeBlocksManager.h
 *
 *  Created on: Oct 10, 2012
 *      Author: m
 */

#ifndef FREEBLOCKSMANAGER_H_
#define FREEBLOCKSMANAGER_H_

#include "physical_layer_commons.h"

// TODO: renombrar a FreeSpaceManager

namespace physical
{

/**
 * Interfáz de Controladores de Espacio Libre de Archivos
 */
class FreeBlocksManager
{
public:

    FreeBlocksManager() {}
    virtual ~FreeBlocksManager() {}

	/**
	 * Marca como Libre el bloque especificado.
	 *
     * @param pos Posición del bit a liberar
	 */
	virtual void free( blockNumber pos ) = 0;

	/**
	 * Marca como Ocupado el bloque especificado.
	 *
     * @param pos Posición del bit a ocupar
	 */
	virtual void unfree( blockNumber pos ) = 0;

	/**
	 * Devuelve el número de un bloque libre.
	 *
	 * @return Un número de bloque libre
	 */

	virtual blockNumber getFreeBlockNumber() const = 0;
	/**
	 * Verifica si el bloque especificado está libre o no.
	 *
     * @param pos Posición del bit a testear
	 * @return true si el bloque esta libre, false en caso contrario
	 */
	virtual bool isFree( blockNumber pos ) const = 0;
};

}
#endif /* FREEBLOCKSMANAGER_H_ */
